package main

import "fmt"

//	iota 是go语言的常量计数器，只能在常量表达式中使用
//	iota 在 const 关键字出现的时候将被重置为 0
//	const 中每新增一行常量声明都将使得 iota 计数一次
//	iota 可以理解为 const 语句块中的索引
//	使用 iota 能简化定义，在定义枚举时很有用

const (
	a1 = iota 	//0
	a2			//1  常量中没有写东西，默认和上一行一样，相当于是 a2 = iota
	a3			//2
)

//使用 _ 跳过

const (
	b1 = iota 	//0
	b2			//1
	_			//2
	b4			//3
)

// 有插队的情况
const (
	c1 = iota   // iota = 0
	c2  = 100   // iota = 1
	c3 = iota   // iota = 2
  	c4			// iota = 3
)

//多个常量声明在一行
const(
	d1,d2	= iota +1,iota+2
	d3,d4	= iota +1,iota+2
)

//定义数量级
const (
	_ = iota				// iota = 0 舍弃
	KB = 1 << (10*iota) // 1 << 10 = 1024  		//iota = 1
	MB = 1 << (10*iota) // 1 << 20 = 1024*1024  //iota  = 2
	GB = 1 << (10*iota)
	TB = 1 << (10*iota)
)

func main() {
	fmt.Printf("a1 = %d, a2 = %d, a3 = %d\n", a1,a2,a3)
	fmt.Printf("b1 = %d, b2 = %d, b4 = %d\n", b1,b2,b4)
	fmt.Printf("c1 = %d, c2 = %d,c3 = %d, c4 = %d\n", c1,c2,c3,c4)
	fmt.Printf("d1 = %d, d2 = %d,d3 = %d, d4 = %d\n", d1,d2,d3,d4)

	fmt.Printf("KB = %d, MB = %d,GB = %d, TB = %d\n", KB,MB,GB,TB)

}
